package br.com.vti.sisp_sicrim.antigo.dao;

import java.sql.CallableStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.UUID;

import br.com.vti.sisp_sicrim.antigo.dao.util.HibernateUtil;

public class SicControleDAO {

	private int codigoRetorno = 0; // *ERROR
	private String msgRetorno = ""; // *ERROR
	public long qtdRegistros = 0; // *counter
	public long nroRegistro = 0; // *counter
	private String[] listacol = { "", "NumeroChassi", "NomeRequerente", "EnderecoRequerente", "NumeroIdentidade", "DestinoSolicitacao", "DataEmissao", "TipoDocumento", "MatriculaFunc", "ValorPago", "CodigoRecuperacao", "NumeroDocumento", "CodigoMunicipio", "Datcan", "Matcan", "Renaid" };
	private ResultSet query = null;

	public String insert(String pNumeroChassi, String pNomeRequerente, String pEnderecoRequerente, String pNumeroIdentidade, String pDestinoSolicitacao, Integer pDataEmissao, Integer pTipoDocumento, Integer pMatriculaFunc, Long pValorPago, Integer pCodigoRecuperacao, Long pNumeroDocumento, Integer pCodigoMunicipio, Integer pDatcan, Integer pMatcan, String pRenaid) {

		String sql = "{ ? = call sp_grava_Sic_Controle ( ?,?,?,?,?,?,?,?,?,?,?,?,?,?,? ) }";
		UUID pId;
		codigoRetorno = 0;
		qtdRegistros = 0;
		nroRegistro = 0;
		msgRetorno = "";
		try {

			CallableStatement stp = HibernateUtil.getConnection().prepareCall(sql);
			stp.registerOutParameter(1, Types.OTHER);
			stp.setString(2, pNumeroChassi); // (getColuna("NumeroChassi")
			stp.setString(3, pNomeRequerente); // (getColuna("NomeRequerente")
			stp.setString(4, pEnderecoRequerente); // (getColuna("EnderecoRequerente")
			stp.setString(5, pNumeroIdentidade); // (getColuna("NumeroIdentidade")
			stp.setString(6, pDestinoSolicitacao); // (getColuna("DestinoSolicitacao")
			stp.setInt(7, pDataEmissao); // (getColuna("DataEmissao")
			stp.setInt(8, pTipoDocumento); // (getColuna("TipoDocumento")
			stp.setInt(9, pMatriculaFunc); // (getColuna("MatriculaFunc")
			stp.setLong(10, pValorPago); // (getColuna("ValorPago")
			stp.setInt(11, pCodigoRecuperacao); // (getColuna("CodigoRecuperacao")
			stp.setLong(12, pNumeroDocumento); // (getColuna("NumeroDocumento")
			stp.setInt(13, pCodigoMunicipio); // (getColuna("CodigoMunicipio")
			stp.setInt(14, pDatcan); // (getColuna("Datcan")
			stp.setInt(15, pMatcan); // (getColuna("Matcan")
			stp.setString(16, pRenaid); // (getColuna("Renaid")
			// execute SP
			stp.execute();
			pId = (UUID) stp.getObject(1);
		} catch (SQLException e) {
			codigoRetorno = 999;
			msgRetorno = e.getMessage();
			return null;
		}
		return String.valueOf(pId);
	}

	public void update(String pId, String pNumeroChassi, String pNomeRequerente, String pEnderecoRequerente, String pNumeroIdentidade, String pDestinoSolicitacao, Integer pDataEmissao, Integer pTipoDocumento, Integer pMatriculaFunc, Long pValorPago, Integer pCodigoRecuperacao, Long pNumeroDocumento, Integer pCodigoMunicipio, Integer pDatcan, Integer pMatcan, String pRenaid) {

		String sql = "{ call sp_atualiza_Sic_Controle ( ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? ) }";
		codigoRetorno = 0;
		qtdRegistros = 0;
		nroRegistro = 0;
		msgRetorno = "";
		try {

			CallableStatement stp = HibernateUtil.getConnection().prepareCall(sql);
			stp.setObject(1, UUID.fromString(pId)); // getColuna("Id")
			stp.setString(2, pNumeroChassi); // getColuna("NumeroChassi")
			stp.setString(3, pNomeRequerente); // getColuna("NomeRequerente")
			stp.setString(4, pEnderecoRequerente); // getColuna("EnderecoRequerente")
			stp.setString(5, pNumeroIdentidade); // getColuna("NumeroIdentidade")
			stp.setString(6, pDestinoSolicitacao); // getColuna("DestinoSolicitacao")
			stp.setInt(7, pDataEmissao); // getColuna("DataEmissao")
			stp.setInt(8, pTipoDocumento); // getColuna("TipoDocumento")
			stp.setInt(9, pMatriculaFunc); // getColuna("MatriculaFunc")
			stp.setLong(10, pValorPago); // getColuna("ValorPago")
			stp.setInt(11, pCodigoRecuperacao); // getColuna("CodigoRecuperacao")
			stp.setLong(12, pNumeroDocumento); // getColuna("NumeroDocumento")
			stp.setInt(13, pCodigoMunicipio); // getColuna("CodigoMunicipio")
			stp.setInt(14, pDatcan); // getColuna("Datcan")
			stp.setInt(15, pMatcan); // getColuna("Matcan")
			stp.setString(16, pRenaid); // getColuna("Renaid")
			// execute SP
			stp.execute();
		} catch (SQLException e) {
			codigoRetorno = 999;
			msgRetorno = e.getMessage();
		}
	}

	public ResultSet selectNumeroChassi(String pNumeroChassi) {

		String sql = "select * from sp_consNumeroChassi_Sic_Controle (";
		sql = sql + "pNumeroChassi := '" + pNumeroChassi + "' ";
		sql = sql + ")";
		codigoRetorno = 0;
		qtdRegistros = 0;
		nroRegistro = 0;
		msgRetorno = "";
		try {
			query = HibernateUtil.executarQuery(sql);
			if (query == null) {
				return null;
			} else {
				query.first();
				if (query.getRow() == 0) {
					query = null;
					return query;
				}
				if (query.first()) {
					query.last();
					qtdRegistros = query.getRow();
					nroRegistro = 1;
					query.first();
				}
			}
		} catch (SQLException e) {
			codigoRetorno = 999;
			msgRetorno = e.getMessage();
		}

		return query;
	}

	public ResultSet selectNumeroDocumento(Long pNumeroDocumento) {

		String sql = "select * from sp_consNumeroDocumento_Sic_Controle (";
		sql = sql + "pNumeroDocumento := '" + String.valueOf(pNumeroDocumento) + "' ";
		sql = sql + ")";
		codigoRetorno = 0;
		qtdRegistros = 0;
		nroRegistro = 0;
		msgRetorno = "";
		try {
			query = HibernateUtil.executarQuery(sql);
			if (query == null) {
				return null;
			} else {
				query.first();
				if (query.getRow() == 0) {
					query = null;
					return query;
				}
				if (query.first()) {
					query.last();
					qtdRegistros = query.getRow();
					nroRegistro = 1;
					query.first();
				}
			}
		} catch (SQLException e) {
			codigoRetorno = 999;
			msgRetorno = e.getMessage();
		}

		return query;
	}

	public ResultSet read() {

		String sql = "select * from sp_le_Sic_Controle ()";
		codigoRetorno = 0;
		qtdRegistros = 0;
		nroRegistro = 0;
		msgRetorno = "";
		try {
			query = HibernateUtil.executarQuery(sql);
			if (query == null) {
				return null;
			} else {
				query.first();
				if (query.getRow() == 0) {
					query = null;
					return query;
				}
				if (query.first()) {
					query.last();
					qtdRegistros = query.getRow();
					nroRegistro = 1;
					query.first();
				}
			}
		} catch (SQLException e) {
			codigoRetorno = 999;
			msgRetorno = e.getMessage();
		}

		return query;
	}

	public ResultSet readNumeroChassige(String pNumeroChassi) {

		String sql = "select * from sp_leNumeroChassiMaiorig_Sic_Controle (";
		sql = sql + "pNumeroChassi := '" + pNumeroChassi + "' ";
		sql = sql + ")";
		codigoRetorno = 0;
		qtdRegistros = 0;
		nroRegistro = 0;
		msgRetorno = "";
		try {
			query = HibernateUtil.executarQuery(sql);
			if (query == null) {
				return null;
			} else {
				query.first();
				if (query.getRow() == 0) {
					query = null;
					return query;
				}
				if (query.first()) {
					query.last();
					qtdRegistros = query.getRow();
					nroRegistro = 1;
					query.first();
				}
			}
		} catch (SQLException e) {
			codigoRetorno = 999;
			msgRetorno = e.getMessage();
		}

		return query;
	}

	public ResultSet readNumeroDocumentoge(Long pNumeroDocumento) {

		String sql = "select * from sp_leNumeroDocumentoMaiorig_Sic_Controle (";
		sql = sql + "pNumeroDocumento := '" + String.valueOf(pNumeroDocumento) + "' ";
		sql = sql + ")";
		codigoRetorno = 0;
		qtdRegistros = 0;
		nroRegistro = 0;
		msgRetorno = "";
		try {
			query = HibernateUtil.executarQuery(sql);
			if (query == null) {
				return null;
			} else {
				query.first();
				if (query.getRow() == 0) {
					query = null;
					return query;
				}
				if (query.first()) {
					query.last();
					qtdRegistros = query.getRow();
					nroRegistro = 1;
					query.first();
				}
			}
		} catch (SQLException e) {
			codigoRetorno = 999;
			msgRetorno = e.getMessage();
		}

		return query;
	}

	public ResultSet findDataEmissaoin(Integer pDataEmissao1, Integer pDataEmissao2) {

		String sql = "select * from sp_pesqDataEmissaoFaixa_Sic_Controle (";
		sql = sql + "pDataEmissao1 := '" + String.valueOf(pDataEmissao1) + "',";
		sql = sql + "pDataEmissao2 := '" + String.valueOf(pDataEmissao2) + "' ";
		sql = sql + ")";
		codigoRetorno = 0;
		qtdRegistros = 0;
		nroRegistro = 0;
		msgRetorno = "";
		try {
			query = HibernateUtil.executarQuery(sql);
			if (query == null) {
				return null;
			} else {
				query.first();
				if (query.getRow() == 0) {
					query = null;
					return query;
				}
				if (query.first()) {
					query.last();
					qtdRegistros = query.getRow();
					nroRegistro = 1;
					query.first();
				}
			}
		} catch (SQLException e) {
			codigoRetorno = 999;
			msgRetorno = e.getMessage();
		}

		return query;
	}

	public ResultSet findMutidt(Integer pCodigoMunicipio, Integer pTipoDocumento, Integer pDataEmissao1, Integer pDataEmissao2) {

		String sql = "select * from sp_pesqMutidt_Sic_Controle (";
		sql = sql + "pCodigoMunicipio := '" + String.valueOf(pCodigoMunicipio) + "',";
		sql = sql + "pTipoDocumento := '" + String.valueOf(pTipoDocumento) + "',";
		sql = sql + "pDataEmissao1 := '" + String.valueOf(pDataEmissao1) + "',";
		sql = sql + "pDataEmissao2 := '" + String.valueOf(pDataEmissao2) + "' ";
		sql = sql + ")";
		codigoRetorno = 0;
		qtdRegistros = 0;
		nroRegistro = 0;
		msgRetorno = "";
		try {
			query = HibernateUtil.executarQuery(sql);
			if (query == null) {
				return null;
			} else {
				query.first();
				if (query.getRow() == 0) {
					query = null;
					return query;
				}
				if (query.first()) {
					query.last();
					qtdRegistros = query.getRow();
					nroRegistro = 1;
					query.first();
				}
			}
		} catch (SQLException e) {
			codigoRetorno = 999;
			msgRetorno = e.getMessage();
		}

		return query;
	}

	public ResultSet findNumeroChassi(String pNumeroChassi) {

		String sql = "select * from sp_pesqNumeroChassi_Sic_Controle (";
		sql = sql + "pNumeroChassi := '" + pNumeroChassi + "' ";
		sql = sql + ")";
		codigoRetorno = 0;
		qtdRegistros = 0;
		nroRegistro = 0;
		msgRetorno = "";
		try {
			query = HibernateUtil.executarQuery(sql);
			if (query == null) {
				return null;
			} else {
				query.first();
				if (query.getRow() == 0) {
					query = null;
					return query;
				}
				if (query.first()) {
					query.last();
					qtdRegistros = query.getRow();
					nroRegistro = 1;
					query.first();
				}
			}
		} catch (SQLException e) {
			codigoRetorno = 999;
			msgRetorno = e.getMessage();
		}

		return query;
	}

	public ResultSet findNumeroDocumentoTipoDocumento(Long pNumeroDocumento, Integer pTipoDocumento) {

		String sql = "select * from sp_pesqNumeroDocumentoTipoDocumento_Sic_Controle (";
		sql = sql + "pNumeroDocumento := '" + String.valueOf(pNumeroDocumento) + "',";
		sql = sql + "pTipoDocumento := '" + String.valueOf(pTipoDocumento) + "' ";
		sql = sql + ")";
		codigoRetorno = 0;
		qtdRegistros = 0;
		nroRegistro = 0;
		msgRetorno = "";
		try {
			query = HibernateUtil.executarQuery(sql);
			if (query == null) {
				return null;
			} else {
				query.first();
				if (query.getRow() == 0) {
					query = null;
					return query;
				}
				if (query.first()) {
					query.last();
					qtdRegistros = query.getRow();
					nroRegistro = 1;
					query.first();
				}
			}
		} catch (SQLException e) {
			codigoRetorno = 999;
			msgRetorno = e.getMessage();
		}

		return query;
	}

	public ResultSet findNumeroDocumentoTipoDocumentoin(Long pNumeroDocumento, Integer pTipoDocumento1, Integer pTipoDocumento2) {

		String sql = "select * from sp_pesqNumeroDocumentoTipoDocumentoIn_Sic_Controle (";
		sql = sql + "pNumeroDocumento := '" + String.valueOf(pNumeroDocumento) + "',";
		sql = sql + "pTipoDocumento1 := '" + String.valueOf(pTipoDocumento1) + "',";
		sql = sql + "pTipoDocumento2 := '" + String.valueOf(pTipoDocumento2) + "' ";
		sql = sql + ")";
		codigoRetorno = 0;
		qtdRegistros = 0;
		nroRegistro = 0;
		msgRetorno = "";
		try {
			query = HibernateUtil.executarQuery(sql);
			if (query == null) {
				return null;
			} else {
				query.first();
				if (query.getRow() == 0) {
					query = null;
					return query;
				}
				if (query.first()) {
					query.last();
					qtdRegistros = query.getRow();
					nroRegistro = 1;
					query.first();
				}
			}
		} catch (SQLException e) {
			codigoRetorno = 999;
			msgRetorno = e.getMessage();
		}

		return query;
	}

	public ResultSet pesquisaProximo() {
		// query
		try {
			if (query == null)
				return null;
			if (query.getRow() == 0) {
				query = null;
				return null;
			}
			query.next();
			if (query.getRow() == 0) {
				query = null;
				return null;
			}
			if (query != null) {
				nroRegistro++;
			}
			return query;
		} catch (SQLException e) {
			codigoRetorno = 999;
			msgRetorno = e.getMessage();
			return null;
		}
	}

	public boolean temProximo() {
		try {
			if (query == null)
				return false;
			if (query.getRow() == 0) {
				return false;
			}
		} catch (SQLException e) {
			codigoRetorno = 999;
			msgRetorno = e.getMessage();
			return false;
		}
		return (nroRegistro < qtdRegistros);
	}

	public void fecha() {
		if (query == null)
			return;
		try {
			query.close();
			query = null;
		} catch (SQLException e) {
			codigoRetorno = 999;
			msgRetorno = e.getMessage();
			query = null;
		}
	}

	public int getColuna(String coluna) {
		for (int i = 0; i < listacol.length; i++) {
			if (listacol[i].equals(coluna))
				return i;
		}
		return -1;
	}

}
